
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BaseDatos.GeneradorMySQL;

import Modelo.Prestamo;
import java.util.Date;

/**
 * @author Marko
 */
public class PrestamosMySQL{

////////////////////////////////////////////////////////////////////////////////
// Constructores
////////////////////////////////////////////////////////////////////////////////
    
    /**
     * constructor por defecto de la clase
     */
    public PrestamosMySQL(){
        
    }

////////////////////////////////////////////////////////////////////////////////
// Interfaz de la clase
////////////////////////////////////////////////////////////////////////////////

    /**
     * construye la instruccion MySQL para el borrado de un prestamo
     * @param _matricula
     * @param _numInventario
     * @return Devuelve la instruccion construida
     */
    public String borrado(String _matricula, String _numInventario){
        String instruccionesMySQL = "DELETE FROM prestamos WHERE Matricula = '" +_matricula+ "' "
                + "AND NumInventario = '" +_numInventario+ "'";
        return instruccionesMySQL;
    }
    
    /**
     * Construye la instruccion para la consulta de los prestamos activos apartir
     * de la matricula, nombre o numero de inventario que le pasen
     * @param _datoBusqueda solo puede ser nombre, matricula o numero de inventario
     * @return Devuelve la instruccion construida
     */
    public String consultaGeneral(String _datoBusqueda){
        String instruccionesMySQL;
        switch (_datoBusqueda){
            case "":
                instruccionesMySQL = "SELECT * FROM prestamos";
                break;
            default:
                instruccionesMySQL = "SELECT * FROM prestamos WHERE "
                        + "Nombre LIKE '" + _datoBusqueda + "%'"
                        + " OR Matricula LIKE '" + _datoBusqueda + "%'"
                        + " OR NumInventario LIKE '" + _datoBusqueda + "%'";
                break;
        }
        return instruccionesMySQL;
    }

    /**
     * construye la instruccion para la consulta particular de un prestamo
     * a partir del numero de inventario del equipo
     * @param _numInventario
     * @return Devuelve la instruccion construida
     */
    public String consultaParticular(String _numInventario){
        String instruccionMySQL = "SELECT * FROM prestamos WHERE NumInventario = '"
                + _numInventario + "' LIMIT 1";
        return instruccionMySQL;
    }
    
    /**
     * Construye la instruccion para la cancelacion de un prestamo
     * @param _canceladoPor
     * @param _fechaCancelacion
     * @param _matricula
     * @param _numInventario
     * @return Devuelve la instruccion construida
     */
    public String cancelacion(
     String _canceladoPor,
     Date _fechaCancelacion,
     String _matricula,
     String _numInventario
    ){
        String fechaCancelacion = formatoFecha(_fechaCancelacion);
        String instruccionMySQL = "INSERT INTO cancelaciones (EntregadaPor, CanceladoPor, FechaCancelacion, "
                + "Matricula, NumInventario, TipoPrestamo ) SELECT EntregadaPor, "
                + "'" + _canceladoPor + "','" + fechaCancelacion +"', Matricula, "
                + "NumInventario, TipoPrestamo FROM prestamos WHERE Matricula = '" 
                + _matricula + "' AND NumInventario = '" + _numInventario + "' LIMIT 1";
        return instruccionMySQL;
    }
    
    /**
     * Construye la instruccion para la devolucion de un articulo prestado
     * @param _matricula
     * @param _numInventario
     * @param _recibidaPor
     * @param _fechaDevolucion
     * @return Devuelve la instruccion construida
     */
    public String devolucion(
     String _matricula,
     String _numInventario,
     String _recibidaPor,
     Date _fechaDevolucion
            
    ){
        String fechaDevolucion = formatoFecha(_fechaDevolucion);      
        String instruccionMySQL = "INSERT INTO devoluciones (Matricula, NumInventario, "
                + "NumInveOriginal, EntregadaPor, ModificadoPor, RecibidaPor, FechaEntrega, "
                + "FechaDevolucion, TipoPrestamo, Renovado ) "
                + "SELECT Matricula, NumInventario, NumInveOriginal, EntregadaPor, ModificadoPor, "
                + "'"+ _recibidaPor+ "', FechaEntrega, '" + fechaDevolucion +"', "
                + "TipoPrestamo, Renovado FROM prestamos WHERE Matricula = '" 
                + _matricula + "' AND NumInventario = '" +_numInventario+ "' LIMIT 1";
        return instruccionMySQL;
    }
    
    /**
     * Construye la instruccion para la modificacion de un prestamo
     * @param _prestamo
     * @return Devuelve la instruccion construida
     */
    public String modificar(Prestamo _prestamo){
        String matricula = _prestamo.obtenerMatricula();
        String numInventarioOriginal = _prestamo.obtenerNumInvOriginal();
        String fechaDevolucion = formatoFecha(_prestamo.obtenerFechaLimite());
        
        String isntruccionMySQL = "UPDATE prestamos SET"
                + " NumInventario = '" + _prestamo.obtenerNumInventario() + "',"
                + " NumInveOriginal = '" + numInventarioOriginal + "',"
                + " ModificadoPor = '" + _prestamo.obtenerModificadoPor() + "',"
                + " FechaRenovacion = " + _prestamo.obtenerFechaPrestamo() + "',"
                + " FechaLimiteDevolucion = '" + fechaDevolucion + "',"
                + " TipoPrestamo = '" + _prestamo.obtenerTipoPrestamo() + "',"
                + " Renovado = '" + _prestamo.fuePrestamoRenovado() + "'"
                + " WHERE Matricula = '" + matricula + "'"
                + " AND NumInventario = '" + numInventarioOriginal + "' LIMIT 1";
        return isntruccionMySQL;
    }
    
    /** 
     * Construye la instruccion para el registro de un nuevo prestamo
     * @param _nuevoPrestamo
     * @return Devuelve la instruccion construida
     */
    public String registro(Prestamo _nuevoPrestamo){
        String fechaPrestamo = formatoFecha(_nuevoPrestamo.obtenerFechaPrestamo());
        String fechaDevolucion = formatoFecha(_nuevoPrestamo.obtenerFechaLimite());
        
        String instruccionesMySQL = "INSERT INTO prestamos (Nombre, Matricula, NumInventario, "
                + "NumInveOriginal, EntregadaPor, ModificadoPor, FechaEntrega, FechaRenovacion, "
                + "FechaLimiteDevolucion, TipoPrestamo, Renovado )VALUES ('"
                + _nuevoPrestamo.obtenerNombre() + "','"
                + _nuevoPrestamo.obtenerMatricula() + "','"
                + _nuevoPrestamo.obtenerNumInventario() + "','"
                + _nuevoPrestamo.obtenerNumInvOriginal() + "','"
                + _nuevoPrestamo.obtenerEntregadoPor() + "','"
                + _nuevoPrestamo.obtenerModificadoPor() + "','"
                + fechaPrestamo + "','"
                + "','"
                + fechaDevolucion + "','"
                + _nuevoPrestamo.obtenerTipoPrestamo() + "','"
                + _nuevoPrestamo.fuePrestamoRenovado() + "')";
        return instruccionesMySQL;
    }
    
    /**
     * Construye la instruccion par ala renovacion de un prestamo
     * @param _modificadoPor
     * @param _fechaDevolucion
     * @param _renovado
     * @param _numInventario
     * @return Devuelve la instruccion construida
     */
    public String renovacion(
     String _modificadoPor,
     Date _fechaDevolucion,
     int _renovado,
     String _numInventario
    ){        
        String fechaDevolucion = formatoFecha(_fechaDevolucion);
        String isntruccionMySQL = "UPDATE prestamos SET"
                + " ModificadoPor = '" + _modificadoPor + "',"
                + " FechaAproxDevolucion = '" + fechaDevolucion + "',"
                + " Renovado = '" + _renovado + "'"
                + " WHERE NumInventario = '" + _numInventario + "' LIMIT 1";
        return isntruccionMySQL;
    }
    
////////////////////////////////////////////////////////////////////////////////
// Metodos Privados
////////////////////////////////////////////////////////////////////////////////
    
    /**
     * establece el formato correcto de las fechas para poder guardarlas en la 
     * base de datos
     * @param _fecha
     * @return Devuelve la fecha con el formato correcto
     */
    private String formatoFecha(Date _fecha){
        java.text.SimpleDateFormat formatoDia = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date fecha = _fecha;
        return formatoDia.format(fecha);
    }
    
////////////////////////////////////////////////////////////////////////////////
// Declaracion de Variables
////////////////////////////////////////////////////////////////////////////////
}
